﻿#pragma once
#include "stdafx.h"
/*
给定一个整数数组 nums 和一个目标值 target，请你在该数组中找出和为目标值的那 两个 整数，并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是，数组中同一个元素不能使用两遍。

 

 示例:

 给定 nums = [2, 7, 11, 15], target = 9

 因为 nums[0] + nums[1] = 2 + 7 = 9
 所以返回 [0, 1]

*/

vector<int> twoSum(vector<int>& nums, int target) {
	unordered_map<int, int> record;
	for (int i = 0; i < nums.size(); i++)
	{
		if (record.count(nums[i])) //count 在map中是找到的功能， 只有 0和 1
		{
			return{ record[nums[i]],i };
		}
		record[target - nums[i]] = i;
	}
	return{ -1,-1 };
}

void testtwoSum()
{
	vector<int> Nums = {2,7,11,15};
	int target = 9;
	for (auto & i: Nums)
	{
		cout << i << " ";
	}
	cout << endl;
	vector<int> result = twoSum(Nums, target);
	//输出结果
	cout << "first : " << result[0] << "  second : " << result[1] << endl;

}


/*
结果：
2 7 11 15
first : 0  second : 1

*/
